Many applications require storage and retrieval of data from among vast amounts of graphic image data. To reduce storage requirements, the image data is frequently stored on media in a compressed format. Conventional systems typically decompress an entire file containing data for an image before loading it into memory. The data for the image is then sent to a frame buffer for display on a display device. While decompression prior to loading data in memory may facilitate display, it does so at the expense of memory and hardware cost. The decompressed data will occupy much more memory than its compressed counterpart, increasing hardware cost and/or leaving less memory available for storing other data and for other purposes.
Conventional systems typically do not maintain files of interest in memory for repeated use. If sufficient memory is available, a first decompressed file may occupy a significant portion, if not all, of the available memory in a conventional system. When data from a second file is needed, memory in which the first decompressed file is stored is deallocated and the second file is decompressed and loaded into memory. If data from the first file is needed later, the entire process must be performed again, swapping the first file for the second file. As the system must access a disk to decompress and load the desired file into memory each time it is needed, this process is time consuming and inefficient and reduces response time.
Conventional systems are also typically unable to efficiently isolate data for a subsequent image from a decompressed file in memory. After displaying a first image from a decompressed file loaded in memory, many systems will reload the file from disk into memory to access data for a second image. This reloading operation entails accessing the disk and decompressing the file. Other systems will read and rewrite the entire decompressed file in memory to cull out data for the image of interest, a process which is conducive to memory fragmentation.
Such use of resources compromises the performance of a conventional graphic image display system by relying heavily on redundant disk access operations to load data into memory. Memory provides storage at a higher cost per megabyte than hard disks and CD-ROMs, but typically with relatively fast access and data transfer rates. In sharp contrast, hard disks and CD-ROMs provide relatively inexpensive non-volatile storage for large amounts of data, but take substantially more time to access and transfer data (often hundreds or thousands of times longer than the time taken to access data in memory), thereby creating a bottleneck.
Delays caused by accessing and transferring data from a disk can be particularly acute in the case of a conventional geographic display system, such as a system for displaying geographic images from CADRG data. Frequently, a sequence of images is displayed, starting with a first geographic image, then one or more other images for contiguous regions. Even if a single file contains the data for these images, many conventional systems must decompress the file and reload the data into memory to access the data for successive images. Common operations, such as flipping back and forth between two images, panning and cycling through a series of images, may entail multiple disk access, loading and decompression operations, consuming substantial time.
Instead of decompressing data for only an area of interest, conventional systems typically decompress an entire file, further compromising performance. Such indiscriminate decompression wastes both time and memory.
Frequent memory allocation and deallocation operations performed by conventional systems may further compromise performance. Such operations are conducive to memory fragmentation, especially in systems running multithreaded applications and multitasking operating systems, and consume valuable time. Memory can be viewed as a continuous range of allocatable cells. Fragmentation, the occurrence of unused gaps between useful cells in memory, can both increase the requirement for memory and slow down computation due to less efficient use of the storage hierarchy and complexity of memory access.